package cn.com.niit.echartsdemo.controller;

import cn.com.niit.echartsdemo.dao.MrResultMapper;
import cn.com.niit.echartsdemo.model.MrResult;
import cn.com.niit.echartsdemo.ws.WSEndpoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

import javax.servlet.http.HttpServletRequest;
import java.util.*;

// @RestController 整个类中的方法，都不进行跳转 一般是前后端分离时候使用

@Controller // 默认的返回值名称
public class HelloController {

    @Autowired
    WSEndpoint wsEndpoint;

    // 依赖注入，加@mapper，启动时候spring已经将mapper扫描到容器中
    // 就可以用注入的方式使用
    @Autowired
    MrResultMapper mrResultMapper;

    @RequestMapping("/index")
    public String goIndex(String name){
        return "index";
    }


    @RequestMapping("/hello")
    public String goHello(ModelMap map){

    List<MrResult> mrResults  =  mrResultMapper.listAll(new MrResult());

        map.addAttribute("results",mrResults);
        // 返回值默认是界面名称
        return "hello";
    }

    @RequestMapping("/getBarData")
    @ResponseBody // 将放回值类型修改为JSON
    Map<String,Object> getBarData(){
        Map<String,Object> result = new HashMap<>();
        List<String> ids =  new ArrayList<>();
        List<Integer> counts =  new ArrayList<>();

        mrResultMapper.listAll(new MrResult()).forEach(e->{
            ids.add(e.getGoodsId());
            counts.add(e.getGoodsViewCount());
        });

        result.put("xData",ids);
        result.put("yData",counts);

        return result;
    }

    @RequestMapping("/update")
    public String updateById() throws InterruptedException {

        Random random = new Random();
        int count = 0;
        int i=100;
        while(i > 0){
            count = random.nextInt(10000);
            MrResult mrResult = new MrResult("1005",count);
            mrResultMapper.update(mrResult);

            // 发送消息到客户端，通知界面数据变化了
            wsEndpoint.sendMessageToAll("数据变化了，请更新界面");
            Thread.sleep(500);
        }


        // 返回值默认是界面名称
        return "hello";
    }
//    @RequestMapping("/update")
//    public String update(String name){
//
//    wsEndpoint.sendMessageToAll("数据已更新");
//        // 返回值默认是界面名称
//        return "hello";
//    }

//    @RequestMapping("/index")
//    public List<String> goIndex(String name){
//
//        List<String> names = new ArrayList<>();
//        names.add("三国");
//        names.add("红楼梦");
//        names.add(name);
//        return names;
//    }


}
